package org.huawei260.OD260;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

/**
 * @Auther: qingle
 * @Date: 2024/8/19-16:24
 * @Description: 小明今年升学到了小学一年级，
 * 来到新班级后，发现其他小朋友身高参差不齐，
 * 然后就想基于各小朋友和自己的身高差，对他们进行排序，
 * 请帮他实现排序
 *
 * @version: 1.0
 */
public class O0006_身高排序_no {

	// 获得身高差和对应的索引，按照身高差进行排序
	// 如果身高差相等，则小的排在前面
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int h = sc.nextInt();
		int num = sc.nextInt();
		List<Integer> highs = new ArrayList<>(h);
		for (int i = 0; i < num; i++) {
			highs.add(sc.nextInt());
		}
		solution(h, highs);

	}

	public static void solution(int h, List<Integer> highs) {
		// 定义比较器，首先根据与小明身高差的绝对值排序，如果相同则根据身高排序
		Comparator<Integer> comparator = (a, b) -> {
			int diffA = Math.abs(a - h);
			int diffB = Math.abs(b - h);
			if (diffA != diffB) {
				return diffA - diffB;
			} else {
				return a - b; // 如果身高差相同，则个子较小的排在前面
			}
		};

		// 对列表进行排序
		Collections.sort(highs, comparator);

		// 输出排序结果，以空格分割
		for (int height : highs) {
			System.out.print(height + " ");
		}
		System.out.println();
	}



//	private static void solution(int h, List<Integer> highs) {
//		// 根据与目标高度的差异对高度列表进行排序
//		highs.sort((h1, h2) -> {
//			// 计算第一个高度与目标高度的差异
//			int diff1 = Math.abs(h1 - h);
//			// 计算第二个高度与目标高度的差异
//			int diff2 = Math.abs(h2 - h);
//			// 如果差异相同，则按照高度值本身排序，否则按照差异排序
//			return diff1 == diff2 ? h1 - h2 : diff1 - diff2;
//		});
//
//		for (int i = 0; i < highs.size(); i++) {
//			System.out.print(highs.get(i));
//			if (i != highs.size() - 1) {
//				System.out.print(" ");
//			}
//		}
//	}

}
